As an error correction code, there are a systematic code and a non-systematic code. The systematic code is a code in which encoded data (code word) is separated into encoding target data (message) and redundant data (parity) that is newly added by encoding. The non-systematic code is a code in which a code word is not separated into a message and a parity.
In the case in which the systematic code is used, in order to extract a message, an operation of removing an error from a code word is performed, and then a message part included in the code word only has to be extracted. On the other hand, in the case in which the non-systematic code is used, an operation of removing an error from a code word is performed, and then an operation of extracting a message from the corrected code word needs to be performed.
Meanwhile, when a single circuit is desired to have a plurality of correction capabilities, in the case in which the non-systematic code is used, a multiplication circuit (a circuit to multiply input polynomial and generator polynomial) is used for encoding. Therefore, in order to change a correction capability, multiplication circuits of a generator polynomial corresponding to the correction capabilities desired to be added only have to be connected in series. Thus, when the non-systematic code is used, a plurality of correction capabilities can be implemented with the circuit size of a multiplication circuit corresponding to a maximum correction capability among a plurality of correction capabilities. On the other hand, when the systematic code is used, since a modulo circuit or a remainder circuit (a circuit to calculate the remainder of division of input polynomial by generator polynomial) is used for encoding, the circuit size increases in approximate proportion to the number of correction capabilities.